from django.db import models


class User(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=30, unique=True)
    password = models.CharField(verbose_name='密码', max_length=128)
    email = models.EmailField(verbose_name='邮箱', unique=True)
    created_at = models.DateTimeField(verbose_name='注册时间', auto_now_add=True)
    class Meta:
        db_table = 'CaseDemo15User'
        verbose_name = '用户'
        # 去除额外字段的方式
        # exclude = ['created_at']
        """
        extra_kwargs = {
            'password': {'write_only': True}
        }"""
    @property
    def is_authenticated(self):
        return True
    """
    @property 是一个装饰器，表示这个方法将被视为属性，而不是常规方法。换句话说，你可以像访问对象的属性一样，访问这个方法。
    举个例子，如果你有一个 User 对象，你可以直接访问 user.is_authenticated，而不是调用 user.is_authenticated()。
    is_authenticated 是一个属性方法，返回 True。通常它用于在 Django 中表示用户是否已认证。在 Django 的认证系统中，
    用户对象会有一个 is_authenticated 属性，用于判断用户是否通过认证（例如登录）。
    作用：
        @property 装饰器：使得 is_authenticated 变成一个可访问的属性，而不是方法（即不需要加 () 来调用）。
        return True：表示该用户对象默认是认证通过的，返回 True。
    """

# models.py 增加 Token 表
class UserToken(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    token = models.CharField(max_length=64)
    create_time = models.DateTimeField(auto_now_add=True)  # 添加这个字段



class Game(models.Model):
    name = models.CharField(verbose_name='游戏名字', max_length=10)
    desc = models.CharField(verbose_name='描述', max_length=100)
    user = models.ForeignKey(User, verbose_name='用户', on_delete=models.SET_NULL, null=True)
    class Meta:
        db_table = 'CaseDemo15Game'
        verbose_name = '游戏'

